package com.awanp3.nimbus.common.json.handler;

import com.awanp3.nimbus.common.core.enums.FormatsType;
import com.awanp3.nimbus.common.core.utils.StringUtils;
import com.awanp3.nimbus.common.json.context.TimeZoneContextHolder;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
 * 自定义 Date 类型反序列化处理器（支持多种格式）
 *
 * @author 20014170
 */
public class CustomDateDeserializer extends JsonDeserializer<Date> {

    /**
     * 反序列化逻辑：将字符串转换为 Date 对象
     *
     * @param p    JSON 解析器，用于获取字符串值
     * @param ctxt 上下文环境（可用于获取更多配置）
     * @return 转换后的 Date 对象，若为空字符串返回 null
     * @throws IOException 当字符串格式非法或转换失败时抛出
     */
    @Override
    public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        TimeZone timeZone = TimeZoneContextHolder.getTimeZone();
        DateFormat format = new SimpleDateFormat(FormatsType.YYYY_MM_DD_HH_MM_SS.getTimeFormat());
        format.setTimeZone(timeZone);
        try {
            if (StringUtils.isEmpty(p.getText())) {
                return null;
            }
            return format.parse(p.getText());
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

}
